let c = {};
console.log('xx')

// 获取鼠标在元素上坐标
c.getOffset = (ele) => {
    // 记录坐标位置
    let position = { x: 0, y: 0 };
    // 获取鼠标位置并进行坐标转换
    ele.addEventListener('mousemove', function (e) {
        let { x, y } = c.eventWrapper(e);
        position.x = x;
        position.y = y;
    });
    console.log('ele', ele.getBoundingClientRect())
    return position;
}

// 转换坐标，页面坐标转换成canvas坐标
c.eventWrapper = function (ev) {
    // 获取target对象，以及离页面左上角的位置坐标
    /**
     *  screenX/screenY：其实就是你的鼠标指针距离你电脑屏幕左侧边缘和上侧边缘的距离

clientX/clientY：其实就是你的鼠标指针距离当前网页最左侧和最上侧的距离(不包含滚动条的距离)

pageX/pageY：其实就是你的鼠标指针距离当前网页最最侧和最上侧的距离(包含滚动条的距离)
     */
    let { pageX, pageY, target } = ev;
    // 获取target对象离页面左上角的位置坐标
    // getBoundingClientRect 元素相对于视口的距离
    // let { left, top } = target.getBoundingClientRect()
    // 返回转换后的坐标, x为鼠标离元素左上角的坐标，y为鼠标离元素左上角的坐标
    // console.log('p', pageY, top, target.offsetTop, target.offsetLeft, target);
    return { x: pageX - target.offsetLeft, y: pageY - target.offsetTop };
}

// 角度转弧度
c.toRad = function (angle) {
    return angle * Math.PI / 180;
}

// 弧度转角度
c.toAngle = function (rad) {
    return rad * 180 / Math.PI;
}

/**
 * 随机数函数
 * @param {Array} array  随机数的范围 
 * @param {bool} mode  是否返回整数
 * @return {Number} 随机数
 */
c.rand = function (array, mode) {
    let max = Math.max(...array);
    let min = Math.min(...array);

    return mode ? ~~(Math.random() * (max - min + 1) + min) : Math.random() * (max - min) + min;
}

// 对小球进行边界反弹处理
c.checkBallBounce = function (ball, W, H, bounce) {
    if (ball.x - ball.r <= 0) {
        ball.x = ball.r;
        ball.vx *= bounce;
    } else if (ball.x + ball.r >= W) {
        ball.x = W - ball.r;
        ball.vx *= bounce;
    }
    if (ball.y - ball.r <= 0) {
        ball.y = ball.r;
        ball.vy *= bounce;
    } else if (ball.y + ball.r >= H) {
        ball.y = H - ball.r;
        ball.vy *= bounce;
    }
};